package algo3.display;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.ImageIcon;
import java.util.LinkedList;
import vista.VistaUtils;
import modelo.excepciones.*;
import controlador.Observador;
import controlador.Sujeto;


public class Ventana implements Sujeto{  //extends canvas
	
	/*ATRIBUTOS*/
	protected JFrame parentFrame;
	public JLayeredPane mainPanel;
	protected int ancho;
	protected int alto;
	//private static BufferStrategy strategy;
	private LinkedList <Observador> observadores;
	
	/*CONSTRUCTOR*/
	
	public Ventana(JFrame frame,int ancho, int alto){
		parentFrame = frame;
		this.ancho = ancho;
		this.alto = alto;
		
		mainPanel = new JLayeredPane();
		mainPanel.setBounds(0, 0, ancho, alto);
		parentFrame.add(mainPanel);

		observadores = new LinkedList <Observador>();
		
	}

	public void destroy () {
		// TODO: Throw an exception
		System.out.print("Ventana.destroy() method must be overriden!");
	}
	
	public void setFondo(String path) {
		ImageIcon icono = VistaUtils.cargarIcono(path); 
		
		JLabel label = new JLabel(icono);
		label.setBounds(0, 0, ancho, alto);
		mainPanel.add(label,0);
	}
	
		
	
	/*Observador*/
	public void notificarObservadores() {
		if (!observadores.isEmpty()){
		    for (Observador obs1 : observadores){
		    	//System.out.println("Actualizo observador tecla!");
		        obs1.update();
		    }
		}
	}

	public void registrarObservador(Observador obs) throws UnableToAddElementToListException {
		boolean result = this.observadores.add(obs);
		
		if (!result){
			throw new UnableToAddElementToListException();
		}
	}
	
	public void eliminarObservador(Observador obs) throws UnableToRemoveElementFromListException {
		boolean result = this.observadores.remove(obs);
		
		if(!result){
			throw new UnableToRemoveElementFromListException();
		}
	}
	
	
	

}
